//
//  main.m
//  C5_多维数组
//
//  Created by dllo on 15/10/12.
//  Copyright (c) 2015年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
   
    //定义二维数组
////    int arr[第一维度][第二维度] = 初值
//    int arr[2][3] = {1, 2, 3, 4, 5, 6};
//
//    // 只能第一维度不写,注意,系统会根据初值个数确定数组大小!
//    int b[][3] = {1, 2, 3, 4};
//    
//    // 访问二维数组中的元素
//    printf("%d\n", arr[1][1]);
//    
//    // 遍历二维数组
//    
//    for (int i = 0; i < 2; i++) {
//        for (int j = 0; j < 3; j++) {
//            
//            // 为数组中的每一个元素赋值随机数
//            arr[i][j] = arc4random()% (70 - 30 + 1) + 30;
//            printf("%d ", arr[i][j]);
//        }
//        printf("\n");
//    }
    
    // 基础题: 一个10行20列的二维数组,为数组每个元素赋值随机数,编程找出与第一个元素相等的元素个数.
    
//    int arr[10][20] = {0};
//    int count = -1;
//    for (int i = 0; i < 10; i++) {
//        for (int j = 0; j < 20; j++) {
    
    // 遍历赋值
//            arr[i][j] = arc4random()% (70 - 30 + 1) + 30;
//            printf("%d ", arr[i][j]);
//        }
//        printf("\n");
//    }
//    for (int i = 0; i < 10; i++) {
//        for (int j = 0; j < 20; j++) {
    
    // 若等于第一个元素,计数加一
    // 注意,第一次比较时arr[0][0] == arr[0][0]一定成立,所以count从-1开始
//            if (arr[i][j] == arr[0][0]) {
//                count++;
//            }
//        }
//    }
//    printf("相同个数为%d\n", count);
    
    
    
    // 1、将一个二维数组的行和列交换，存储到另外一个数组中去。
    
//    int arr[2][3] = {1, 2, 3, 4, 5, 6};
//    int b[3][2] = {0};
//    for (int i = 0; i < 3; i++) {
//        for (int j = 0; j < 2; j++) {
//            
//            // 交换
//            // 2行3列交换后的数组为3行2列
//            b[i][j] = arr[j][i];
//            printf("%d ", b[i][j]);
//        }
//        printf("\n");
//    }
    
//    2、有一个3行4列的二维数组，要求编程找出最大元素，并输出所在的行和列。
    
//    int a[3][4] = {0};
//    int max = 0;
//    int m = 0, n = 0;
//    for (int i = 0; i < 3; i++) {
//        for (int j = 0; j < 4; j++) {
//            a[i][j] = arc4random()% (50 - 30 + 1) + 30;
//            printf("%d ", a[i][j]);
//        }
//        printf("\n");
//    }
//    for (int i = 0; i < 3; i++) {
//        for (int j = 0; j < 4; j++) {
//            if (a[i][j] > max) {
//                max = a[i][j];
//                m = i + 1;
//                n = j + 1;
//            }
//        }
//    }
//    printf("%d在%d行%d列\n", max, m, n);
    
    
//    // 多维数组定义
//    int arr[2][3][4] = {0};
//    
//    // 多维数组遍历
//    for (int i = 0; i < 2; i++) {
//        for (int j = 0; j < 3; j++) {
//            for (int k = 0; k < 4; k++) {
//                arr[i][j][k] = arc4random() % (70 - 30 + 1) + 30;
//                printf("%d ", arr[i][j][k]);
//            }
//            printf("\n");
//        }
//        printf("\n");
//    }
//    
//    // 字符串数组
//    // 字符串数组也是二维数组,只不过每行都以\0结尾,而且不一定填满所在行
//    char str[3][10] = {"aaa", "bbbb", "cccccc"};
//    
//    // 打印一个字符串
//    printf("%s\n", str[1]);
//    // 打印一个元素
//    printf("%c\n", str[1][0]);
    
    // 1、创建一个字符串数组（内容是你周围一圈人的姓名），输出最长字符串的长度。
    
//    char str[4][20] = {"GeHeJun", "SunYunPu", "LiQianQian", "DuYuZhuo"};
//    char a[20] = {0};
//    long max = 0;
////    long len0 = strlen(str[0]);
////    long len1 = strlen(str[1]);
////    long len2 = strlen(str[2]);
////    long len3 = strlen(str[3]);
//    
//    for (int i = 0; i < 4; i++) {
//        if (max < strlen(str[i])) {
//            max = strlen(str[i]);
//            strcpy(a, str[i]);
//        }
//    }
//    printf("%s", a);
    
    
//    int len = 0;
//    int maxlen = 0;
//    for (int i = 0; i < 4; i++) {
//        len = strlen([name[i]);
//                      
//    }
    
    // 2、创建一个字符串数组（内容是你周围一圈人的姓名），对字符串（英文）从小到大排序。
    
    char name[4][12] = {"WangNing", "WangBoNan", "ZouYu", "WeiDongDong"};
    
    for (int i = 0; i < 4 - 1; i++) {
        for (int j = 0; j < 4 - i - 1; j++) {
            if (strcmp(name[j], name[j + 1]) > 0) {
                
                //交换
                //注意,temp数组元素个数应该参考谁?
                //注意,数组不可以整体赋值,所以用strcpy
                char temp[12] = {0};
                strcpy(temp, name[j]);
                strcpy(name[j], name[j + 1]);
                strcpy(name[j + 1], temp);
            }
        }
    }
    // 输出打印
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    return 0;
}
